/**
 * 1、声明变量
 * 2、给多个变量赋值
 * 3、【数组】空/未定义检查和分配默认值：使用 OR(||) 短路运算来给一个变量赋默认值
 * 4、【数组】交换两个变量：使用 数组解构赋值 来交换两个变量
 * 5、模板字符串
 * 6、【数组】Array.find：根据对象属性查找特定对象时
 * 7、【数组】在数组中查找最大值和最小值
*/

/**
 *  1、声明变量
*/

//Longhand
let x;
let y = 20;
//Shorthand
let x, y = 20;

/**
 *  2、给多个变量赋值
 * 可以使用数组解构来在一行中给多个变量赋值。
*/

//Longhand
let a, b, c;
a = 5;
b = 8;
c = 12;

//Shorthand
let [a, b, c] = [5, 8, 12];

/**
 * 3、空/未定义检查和分配默认值
 * 当我们需要创建新变量时, 有时需要检查为其值引用的变量是否为null或未定义, 可以考虑如下实现:
*/

//Longhand
let imagePath;
let path = getImagePath();
if (path !== null && path !== undefined && path !== '') {
    imagePath = path;
} else {
    imagePath = 'default.jpg';
}
//Shorthand
let imagePath = getImagePath() || 'default.jpg';

// long
let test1;
if (test1 !== null || test1 !== undefined || test1 !== "") {
    let test2 = test1;
} else {
    let test2 = ''
}
// short
let test2 = test1 || ''

/**
 * 4、交换两个变量
 * 为了交换两个变量，我们通常使用第三个变量。可以使用 数组解构赋值 来交换两个变量。
*/

let x = 'Hello', y = 55;
//Longhand
const temp = x;
x = y;
y = temp;
//Shorthand
[x, y] = [y, x];

/**
 * 5、模板字符串
 * 一般使用 + 运算符来连接字符串变量。使用 ES6 的模板字符串，可以用一种更简单的方法实现这一点。
*/

//Longhand
console.log('You got a missed call from ' + number + ' at ' + time);
//Shorthand
console.log(`You got a missed call from ${number} at ${time}`);

/**
 * 6、Array.find
 * 当确实有一个对象数组并且想要根据对象属性查找特定对象时，find方法确实很有用。
*/
const data = [{
    type: 'test1',
    name: 'abc'
},
{
    type: 'test2',
    name: 'cde'
},
{
    type: 'test1',
    name: 'fgh'
},
]
// long
function findtest1(name) {
    for (let i = 0; i < data.length; ++i) {
        if (data[i].type === 'test1' && data[i].name === name) {
            return data[i];
        }
    }
}

//shorthand
filteredData = data.find(data => data.type === 'test1' && data.name === 'fgh');

/**
 * 7、在数组中查找最大值和最小值
 * 一般使用 + 运算符来连接字符串变量。使用 ES6 的模板字符串，可以用一种更简单的方法实现这一点。
*/

const arr = [1, 2, 3]; 
Math.max(...arr); // 3
Math.min(...arr); // 1
